package NewCoder;

import java.util.ArrayList;

public class BM55 {
    public ArrayList<ArrayList<Integer>> permute(int[] num) {
        ArrayList<ArrayList<Integer>> list=new ArrayList<>();
        ArrayList<Integer> res=new ArrayList<>();
        boolean[] used=new boolean[num.length];
        int n=num.length;
        dfs(list,res,n,used,num);
        return list;

    }
    private void dfs( ArrayList<ArrayList<Integer>> list,ArrayList<Integer> res,
                      int len, boolean[] used,int[] num){
        if(res.size()==len){
            list.add(new ArrayList<>(res));
            return;
        }
        for(int i=0;i<len;i++){
            if(used[i]){
                continue;
            }
            used[i]=true;
            res.add(num[i]);
            dfs(list,res,len,used,num);
            res.remove(res.size()-1);
            used[i]=false;
        }

    }
}
